package com.maxatime.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.maxatime.pojo.data.stuInfoDatss;
import com.maxatime.pojo.studentInformation;
import com.maxatime.service.StudenService;
import org.springframework.beans.BeanUtils;

import java.util.Map;

/**
 * @Auther: 梁玉杰
 * @Date: 2022/4/1 16:22
 * @Description: TODO
 */
public class StuExcelListener extends AnalysisEventListener<stuInfoDatss> {
    /*
 SubjectExcelListener 不能交给spring管理 ，因为在Service 需要自己 new 对象               EasyExcel.read(in, SubjectData.class,new SubjectExcelListener()).sheet().doRead();
        所以spring管理不到，需要自己管理
            那么，不这里面就有一个问题：
                监听器想调用 Service 里面的方法，是调不到的，因为没有交给spring管理，
                包括注入@Autowired，也没有办法注入，因为spring没管理 SubjectExcelListener （监听器）
                    解释：注入：eg：
                              vice中可  之前写Controller、Service，都是交给了Spring进行管理的，都是交给Spring容器管理的，
                                所以才可以在Controller中可以注入Service，在Ser以注入Mapper，
        而现在，我们的 SubjectExcelListener（监听器），它不能交给spring去管理，需要自己手动new，不能注入其他对象
            那么，就有一个问题       --      (不能实现数据库的操作)
                假如，你想在监听器里面，做一个添加/修改，做不到，因为没有注入Service，间接的使用不了Maooer
        那怎么办呢？
            *** 手动使用有参构造设置  --  手动传过来-为了实现添加操作
     */

    public StudenService studenService;
    public StuExcelListener() {
    }
    public StuExcelListener(StudenService studenService) {
        this.studenService = studenService;
    }   //Service new的监听器是加了参数eduSubjectService
    //这么做的话，这个有参构造 this.eduSubjectService ==>   就是Service对象 可以实现后面的添加操作 不懂



    @Override//读取方法（一行一行去读取excle内容）
    public void invoke(stuInfoDatss stuInfoDatss, AnalysisContext analysisContext) {
//        if (stuInfoDatss == null){
//            throw new Exception(20001,"文件数据为空");
//        }
        studentInformation studentInformation = new studentInformation();
        BeanUtils.copyProperties(stuInfoDatss,studentInformation);


//        System.out.println("____"+stuInfoDatss);
//        System.out.println("####"+studentInformation);
        studenService.insertStuExcel(studentInformation);
    }

    //读取excel表头信息   在继承类 AnalysisEventListener 中的 invokeHeadMap 的方法中
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头信息："+headMap);

    }

    //读取表头暂时用不到

    @Override  //读取完成后执行
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}
